package cn.hchaojie.javase.day04;

import org.junit.Test;

/**
 * 方法重载：
 * 	1. 方法名字一样
 *  2. 不一样：参数个数不一样；参数类型不一样；顺序不一样 
 *  3. 不能仅通过返回值类型来区分方法
 * 
 * @author hchaojie
 *
 */
public class Max {
	@Test
	public void test() {
//		System.out.println(max(2, 3));
//		System.out.println(max(2, 3.0));
//		System.out.println(max(2.0, 3));
//
//		System.out.println(max(2, 3, 8));
		
		System.out.println(max(2.0, 2.0, 1.0));
	}
	
	public static int max(int x, int y) {
		return x > y ? x : y;
	}
	
	public static double max(int x, double y) {
		return 1.0;
	}

	public static double max(double y, int x) {
		return 1.0;
	}

	public static int max(int x, int y, int z) {
		int max = x > y ? x : y;
		max = max > z ? max : z;
		
		return max;
	}
	
	public static int max(int[] numbers) {
		if (numbers == null || numbers.length == 0) {
			return Integer.MIN_VALUE;
		}
		
		int max = numbers[0];
		for (int i = 1; i < numbers.length; i++) {
			if (max < numbers[i]) {
				max = numbers[i];
			}
		}
		
		return max;
	}
	
	// 使用可变参数。（参数类型一样，但是个数不确定的时候使用）
	public static double max(double... args) {
		if (args == null || args.length == 0) {
			return Double.MIN_VALUE;
		}
		
		double max = args[0];
		for (int i = 1; i < args.length; i++) {
			if (max < args[i]) {
				max = args[i];
			}
		}
		
		return max;
	}
}
